#ifndef REPORTEXPORT_H
#define REPORTEXPORT_H
#if defined(OFFICEDOCMENT_LIBRARY)
#  define OFFICEDOCMENTS_HARED_EXPORT Q_DECL_EXPORT
#else
#  define OFFICEDOCMENTS_HARED_EXPORT Q_DECL_IMPORT
#endif
#include <QString>
#include <QObject>
#include <elementstytle.h>
class HtmlElement;
class OfficeDocment;
class QFile;
struct TabHeader
{
    QList<QString> headerData;
    ElementStytle   headerStytle;
};
struct TabData
{
    QList<QList<QString>> tableData;
    ElementStytle   dataStytle;
};

class ReportExport:public QObject
{


    Q_OBJECT
public:
    enum AlignType
    {
        Center,
        Left,
        Right,
    };
    ReportExport(const QString& fileName ,QObject *parent = nullptr);
    ReportExport(QObject *parent = nullptr);
    void setReportPath(const QString & fileName);
    /**
     * @brief appendText  追加一个 段落  <P 标签>
     * @param contex    段落内容
     */
    void appendParagraph(const QString &contex, const ElementStytle& eleStyle = ElementStytle());
    /**
     * @brief appendImage 追加一个 图片 img 标签
     * @param imgFile  图片路径
     * @param imgW      图片宽
     * @param imgH      图片高
     * @param text      图注
     * @param type      图注布局方式
     * @param TextEleStyle 图注样式
     */
    void appendImage(const QString& imgFile,int imgW,int imgH, const QString& text=QString(""),
                     AlignType type = Left,const ElementStytle& TextEleStyle = ElementStytle());
    /**
     * @brief appendImage 追加一个 图片 img 标签
     * @param widget    需要截图的界面
     * @param imgW      图片宽
     * @param imgH      图片高
     * @param text      图注
     * @param type      图注布局方式
     * @param TextEleStyle 图注样式
     */
    void appendImage(QObject *widget, int imgW, int imgH, const QString& text=QString(""),
                     AlignType type = Left, const ElementStytle& TextEleStyle = ElementStytle());
    /**
     * @brief appendTable 追加一个 图片 table 标签
     * @param header    表头数据和样式
     * @param data      内容数据和样式
     * @param text      表例
     * @param type      表例布局方式
     * @param TextEleStyle 表例字体样式
     */
    void appendTable(const TabHeader& header ,const TabData &data, const QString& text=QString(""),
                     AlignType type = Left, const ElementStytle& TextEleStyle = ElementStytle());

    void exportReportPdf();
    void exportReportExcel();
    void exportReportWord();
private:
    void checkAndCreatTmepPath();
    void setEleStytle(HtmlElement *ele , ElementStytle stytle);

private:
    OfficeDocment *m_pOfficeDoc;
    QFile * m_pFile;
    quint32 m_nImgIndex;
    QString m_strTempDataFilePath;
};



#endif // REPORTEXPORT_H
